import org.springframework.context.annotation.Configuration;

/**
 * @Description: 测试获取代理对象
 * @author: Yang Qiang
 * @create: 2021-10-18 21:24
 */
@Configuration
public class TestFactory {
	public static void main(String[] args) {
//		DataSource dataSource = null;
//		TransactionFactory transactionFactory = null;
//		Environment environment = new Environment("development", transactionFactory, dataSource);
//		Configuration configuration = null;
//		configuration.addMapper(null);
//
//
//		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
//		SqlSession sqlSession = sqlSessionFactory.openSession();
//
//		// 得到一个对象(和spring方式的注入一个对象一样的)
//		// 返回一个代理对象
//		// 内部使用了jdk动态代理技术, 完成了对UserMapper接口的代理
//		// Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);
//		// 官方
//		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//		mapper.findAll();
	}

	// 把代理对象注入到Sprig容器总, 这样实现类里面的注入Mapper才可以成功
//	@Bean
//	public UserMapper userMapper(){
//		// 自定义获取mapper接口的代理对象
//		/*
//		    ○ 1 返回一个代理对象
//  			○ 2 可以返回指定的对象, 也就是可以返回不同的mapper, 也就是返回特定的代理对象
//  			○ 3 返回的对象可以调用mapper里面的方法, 然后进行查询数据库
//		 */
//		YangSession yangSession = new YangSession();
//		UserMapper userMapper1 = (UserMapper)yangSession.getMapper(UserMapper.class);
//		return userMapper1;
//	}

}
